package _240226;
import java.math.*;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
/*
设i为虚数单位。对于任意正整数n，(2+3i)^n 的实部和虚部都是整数。
求 (2+3i)^123456 等于多少？ 即(2+3i)的123456次幂，这个数字很大，要求精确表示。

答案写成 “实部±虚部i” 的形式，实部和虚部都是整数（不能用科学计数法表示），
中间任何地方都不加空格，实部为正时前面不加正号。(2+3i)^2 写成: -5+12i，
(2+3i)^5 的写成: 122-597i

注意：需要提交的是一个很庞大的复数，不要填写任何多余内容。
*/
public class Main {
	public static void main(String[] arg) {
		// 多项式的幂运算 (a+bi)(c+di) = (ac+adi+cbi-bd) c=2,d=3
		// 求 x+yi
		BigInteger two = BigInteger.valueOf(2);
		BigInteger three = BigInteger.valueOf(3);
		BigInteger x = BigInteger.valueOf(2); // 初始a
		BigInteger y = BigInteger.valueOf(3); // 初始b
		int n = 123456;
		int i = 1;
		for (; i<n; i++) {
			BigInteger a = x.multiply(two).subtract(y.multiply(three));
			BigInteger b = x.multiply(three).add(y.multiply(two));
			x = a;
			y = b;
		}
		
        String filePath = "C:\\Users\\Lenovo\\Desktop\\out1.txt"; // 指定要写入的文件路径

        // 使用try-with-resources语句确保资源的自动关闭
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
            writer.write(x.toString()+"+"+y.toString()+"i"); // 将BigInteger转换为字符串并写入文件
        } catch (IOException e) {
            e.printStackTrace();
        }
        
	}
}
/*
 * (1+1)^2 => 1+1+1+1 = 4
 * (1+2)^2 => 1+2+2+4 = 9 
 * 1,i,-1,-i 1,i,-1,-i
 */